/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
// class Solution {
// public:
//     ListNode* reverseList(ListNode* head) {
//         vector<ListNode*> tmp;
//         ListNode* A=head;
//         if(head==nullptr) return nullptr;
//         while(A)
//         {
//             tmp.push_back(A);
//             A=A->next;
//         }
//         for(int i=tmp.size()-1;i>0;i--)
//         {
//             tmp[i]->next=tmp[i-1];
//         }
//         tmp[0]->next=nullptr;
//         return tmp[tmp.size()-1];
//     }
// };

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* tail=nullptr;
        ListNode* cur=head;
        if(head==nullptr) return nullptr;
        while(cur)
        {
            ListNode* curNode=cur->next;
            cur->next=tail;
            tail=cur;
            cur=curNode;
        }
        return tail;
    }
};
